01 您所在的位置:网站首页 go 底层原理 01

01

2023-06-27 19:04| 来源: 网络整理| 查看: 265

前言

之前,我们在探索动画及渲染相关原理的时候,我们输出了几篇文章,解答了iOS动画是如何渲染,特效是如何工作的疑惑。我们深感系统设计者在创作这些系统框架的时候,是如此脑洞大开,也 深深意识到了解一门技术的底层原理对于从事该方面工作的重要性。

因此我们决定 进一步探究iOS底层原理的任务,并以本文作为综述,对各个底层原理探究的模块进行概要总结,从而引出各个子模块底层原理探究的分述(详述)

一、概述 1.目前开发iOS客户端的技术栈

我们现在开发iOS应用的技术栈方案大概有几种:

Native原生(以OC、Swift为主,同时支持C、CPP、OC、Swift等混编) 跨平台开发 MobileWeb App 类RN技术 Flutter等 Hybrid(Native+跨平台技术)

我们本次探究iOS底层原理

关注的要点是原生技术栈中的OC、Swift两门语言相关底层原理 不对跨平台方案、Hybrid开发方案中涉及到的其它技术栈进行展开讨论 2.探索系统底层原理的前知识

我们探索底层原理,本质上是探索Native环境下,编程语言 表层语法的底层实现 ,包括 数据结构 与 算法 的实现 和 相关的运作机制等。

因此,我们探索底层原理就是要掌握计算机程序的整个工作过程、在工作过程中不同的阶段的过程表达物等。

为了探索这些底层工作过程,以及理解相关的过程产物,我们也需要掌握与之相关的前知识。具备探索底层原理的能力,掌握探索底层原理的几种手段。

3.探索系统底层原理的整体篇幅

因此,我们探索iOS底层原理必然有三大块需要讨论:

了解计算机程序工作的原理 探索底层原理的前知识 基于OC语言探索iOS底层原理 基于Swift语言探索iOS底层原理 二、 了解计算机程序工作的原理 1.了解计算机程序工作的过程

之前,在重新了解计算机编译原理的时候,我们曾简单介绍过计算机程序的基本过程。也分别介绍了几种编译型语言,编译型语言编写的程序在编译阶段的几个工作流程,若您对 程序编译 了解甚少,可以简单从我的这篇文章对其有一个基本的认识:计算机编译原理

计算机程序工作的基本过程:

image.png

1.在日常开发过程中,程序员编写的程序一般采用高级语言编写,然后存放在硬盘 2.当我们在IDE中 运行 编写好的程序 ,程序就会通过编译,生成二进制可执行文件 装载到内存 3.二进制程序在内存中运行,一般都有基于该类型高级语言编写的执行环境,如: Java的JVM OC/Swift的runtime Node.js的Node 运行在Chrome中的H5其运行环境Chrome的V8引擎 运行在Safari中的H5其运行环境Safari的JavaScriptCore ...... 4.二进制程序在内存中运行过程中,其计算和控制一般由CPU处理,若有关于图形界面处理的逻辑,还会牵扯到GPU 5.二进制程序可以通过CPU控制计算机的硬件器件:显示器、音响、键盘、话筒、蓝牙等....

从前面介绍的知识,我们可以了解到 从计算机程序编写,到其二进制程序 的基本工作的过程。由此,我们得知,要去深入了解一个系统的底层原理,需要进一步认识 编译过程。

2.编译 从我的这篇文章计算机编译原理我们可以知道,编译需要了解 编译器(编译器前端、优化器、编译器后端); 并且,编译器的过程产物中间代码 由 汇编指令 、寄存器 等参与工作。要探索底层原理,我们也需要去认识 上述 几个概念 和相关的知识; 有计算机功底的朋友一定知道,汇编指令、寄存器等 编译过程 是极其 依赖 硬件环境的 比如Win、Mac、iOS、Android 、Unix等系统,他们的 编译过程 都相似,但是汇编指令、寄存器却不太相同; 对于同一款硬件的操作系统,64位系统、32位系统等的寄存器表达也有一定的差异。 因此,我们只需要针对不同的硬件环境去学习相关的知识点就可以了 当然了,若您是一位喜欢钻研底层的优秀选手,也可以凭借个人兴趣去探索一下不同平台的编译。 3.了解iOS程序工作的过程 做iOS开发的同学们都知道,我们通过OC/Swift编写出来的iOS系统的程序,会经过苹果IDE-Xcode 编译,最后输出 二进制程序 文件: ipa包 经过前面的介绍,我们不难得知,我们窥探iOS底层原理的过程中,重点关注整个编译过程即可。

下图是关于iOS的两种语言:Swift、OC在编译器工作的过程基本描述: image.png

高级语言(OC/Swift)-->编译器前端(Clang/SwiftC)-->优化器-->编译器后端(LLVM)-->对应架构(x86、ARM64、armv7)的可执行文件,二进制程序包

4.窥探计算机程序底层的几种方式

从前面的介绍我们得知,我们可以通过汇编窥探系统的底层原理。当然,我们也可以阅读系统开源的 系统底层源码来窥探原理。 总结:探究底层原理的方式大概有两种:

阅读源码(依赖于官方对系统库的开源) 汇编

在探究底层原理过程中,我们必须掌握一定的前知识,才具备探究底层原理的手段。因此,我们也需要对相关的前知识有一定的了解:

编译链、编译器、汇编指令、寄存器 LLVM项目 编译器前端:Clang&&SwiftC 编译器后端LLVM 汇编 x86汇编 ARM汇编 LLDB 三、 基于OC语言探索iOS底层原理

我们的面向对象语言OC的类,都是继承自NSObject,并且OC语言有很多其自身的语法。因此,我们窥探OC语言底层原理也是基本围绕 OC语法、OC的基类来窥探的。 我们会围绕以下几个知识点进行底层原理的探究:

OC的本质 OC对象的本质(Objective-C中的对象,简称OC对象,主要可以分为3种 ) OC对象的分类 instance对象(实例对象) class对象(类对象) Class的底层结构 meta-class对象(元类对象) isa指针 KVO KVC Category Block 关联对象 Runtime RunLoop 多线程 内存管理 四、 基于Swift语言探索iOS底层原理

同样的,我们探索Swift语言的底层原理,也是围绕其语法特性和一些常用类展开的! 我们会围绕以下几个知识点进行底层原理的探究:

内联优化 枚举 结构体、类 闭包 属性、方法、下标、继承 多态原理、init String Array 总结

通过通篇介绍,我们了解了计算机程序工作的基本过程,了解到我们探究底层原理 要去 对 编译过程 有一定的认识。了解到,探索iOS底层原理,是围绕 语言的 一些基类 、语法特性、运行时环境开展的。因此,我们接下来有以下篇幅,展开对底层原理的窥探:

专题系列文章 1.前知识 01-探究iOS底层原理|综述 02-探究iOS底层原理|编译器LLVM项目【Clang、SwiftC、优化器、LLVM】 03-探究iOS底层原理|LLDB 04-探究iOS底层原理|ARM64汇编 2. 基于OC语言探索iOS底层原理 05-探究iOS底层原理|OC的本质 06-探究iOS底层原理|OC对象的本质 07-探究iOS底层原理|几种OC对象【实例对象、类对象、元类】、对象的isa指针、superclass、对象的方法调用、Class的底层本质 08-探究iOS底层原理|Category底层结构、App启动时Class与Category装载过程、load 和 initialize 执行、关联对象 09-探究iOS底层原理|KVO 10-探究iOS底层原理|KVC 11-探究iOS底层原理|探索Block的本质|【Block的数据类型(本质)与内存布局、变量捕获、Block的种类、内存管理、Block的修饰符、循环引用】 12-探究iOS底层原理|Runtime1【isa详解、class的结构、方法缓存cache_t】 13-探究iOS底层原理|Runtime2【消息处理(发送、转发)&&动态方法解析、super的本质】 14-探究iOS底层原理|Runtime3【Runtime的相关应用】 15-探究iOS底层原理|RunLoop【两种RunloopMode、RunLoopMode中的Source0、Source1、Timer、Observer】 16-探究iOS底层原理|RunLoop的应用 17-探究iOS底层原理|多线程技术的底层原理【GCD源码分析1:主队列、串行队列&&并行队列、全局并发队列】 18-探究iOS底层原理|多线程技术【GCD源码分析1:dispatch_get_global_queue与dispatch_(a)sync、单例、线程死锁】 19-探究iOS底层原理|多线程技术【GCD源码分析2:栅栏函数dispatch_barrier_(a)sync、信号量dispatch_semaphore】 20-探究iOS底层原理|多线程技术【GCD源码分析3:线程调度组dispatch_group、事件源dispatch Source】 21-探究iOS底层原理|多线程技术【线程锁:自旋锁、互斥锁、递归锁】 22-探究iOS底层原理|多线程技术【原子锁atomic、gcd Timer、NSTimer、CADisplayLink】 23-探究iOS底层原理|内存管理【Mach-O文件、Tagged Pointer、对象的内存管理、copy、引用计数、weak指针、autorelease 3. 基于Swift语言探索iOS底层原理

关于函数、枚举、可选项、结构体、类、闭包、属性、方法、swift多态原理、String、Array、Dictionary、引用计数、MetaData等Swift基本语法和相关的底层原理文章有如下几篇:

Swift5核心语法1-基础语法 Swift5核心语法2-面向对象语法1 Swift5核心语法2-面向对象语法2 Swift5常用核心语法3-其它常用语法 Swift5应用实践常用技术点 其它底层原理专题 1.底层原理相关专题 01-计算机原理|计算机图形渲染原理这篇文章 02-计算机原理|移动终端屏幕成像与卡顿  2.iOS相关专题 01-iOS底层原理|iOS的各个渲染框架以及iOS图层渲染原理 02-iOS底层原理|iOS动画渲染原理 03-iOS底层原理|iOS OffScreen Rendering 离屏渲染原理 04-iOS底层原理|因CPU、GPU资源消耗导致卡顿的原因和解决方案 3.webApp相关专题 01-Web和类RN大前端的渲染原理 4.跨平台开发方案相关专题 01-Flutter页面渲染原理 5.阶段性总结:Native、WebApp、跨平台开发三种方案性能比较 01-Native、WebApp、跨平台开发三种方案性能比较 6.Android、HarmonyOS页面渲染专题 01-Android页面渲染原理 02-HarmonyOS页面渲染原理 (待输出) 7.小程序页面渲染专题 01-小程序框架渲染原理 移动大前端交流社区

最近和朋友们建了个微信群,欢迎各路喜欢 移动大前端开发的 同学们 加入我们,一起交流,共同进步 image.png



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有